package Classic150;

public class 位1的个数 {
    public int hammingWeight(int n) {
        /*
            常规思路
         */
        int res = 0;
        for (int i = 0; i < 32 && n != 0; i++) {
            if ((n & 1) == 1) res++;
            n >>= 1;
        }
        return res;

        /*
            性质优化，观察这个运算：n & (n−1)，其运算结果恰为把 n 的二进制位中的最低位的 1 变为 0 之后的结果
            如：6 & (6−1) = 4, 6 = (110), 4 = (100)
         */
        /*int res = 0;
        while (n != 0) {
            n &= n - 1;
            res++;
        }
        return res;*/
    }
}
